ヘッダーをスキップ
Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド
リリース7.0
E05164-03
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

カーソルの使用

アプリケーションでは、カーソルを使用して問合せの結果がスクロールされ、一度に1つの結果行が確認されます。

カーソルの詳細は、『Microsoft ODBC 2.0 Programmer's Reference and SDK Guide』および『Microsoft ODBC 3.0 Software Development Kit and Programmer's Reference』を参照してください。

ODBC設定では、カーソルは常に結果セットに関連付けられています。この関連付けはODBCドライバで行われますが、アプリケーションでSQLSetStmtOptionなどのコールを使用して、カーソルの特性(1回にフェッチする行数など)を制御できます。問合せの結果を取得する手順は、次のとおりです。

次の例では、ODBCでこの手順を実行する方法を示します。わかりやすくするために、エラーのチェックは省略してあります。


注意: すべてのオープン・カーソルは、トランザクションのコミットまたはロールバック時にクローズされます。

例1.6

#include <sql.h>

SQLHSTMT hstmt;

SQLRETURN rc;

int i;

SQLSMALLINT numCols;

SQLCHAR colname[32];

SQLSMALLINT colnamelen, coltype, scale, nullable;

SQLULEN collen [MAXCOLS];

SQLLEN outlen [MAXCOLS];

SQLCHAR* data [MAXCOLS];

/* other declarations, and program set-up here */

/* Prepare the SELECT statement */

rc = SQLPrepare(hstmt,

(SQLCHAR*) "SELECT * FROM EMP WHERE AGE>20",

SQL_NTS);

/* ... */

/* Determine number of columns in result rows */

rc = SQLNumResultCols(hstmt, &numCols);

/* ... */

/* Describe and bind the columns */

for (i = 0; i < numCols; i++) {

    rc = SQLDescribeCol(hstmt,

         (SQLSMALLINT) (i + 1),

         colname,(SQLSMALLINT)sizeof(colname),          &colnamelen, &coltype, &collen[i],

         &scale, &nullable);

    /* ... */

    data[i] = (UCHAR*) malloc (collen[i] +1);

    rc = SQLBindCol(hstmt, (SQLSMALLINT) (i + 1),

                    SQL_C_CHAR, data[i],

                    COL_LEN_MAX, &outlen[i]);

    /* ... */

}

/* Execute the SELECT statement */

rc = SQLExecute(hstmt);

/* ... */

/* Fetch the rows */

if (numCols > 0) {

  while ((rc = SQLFetch(hstmt)) == SQL_SUCCESS ||

          rc == SQL_SUCCESS_WITH_INFO) {

    /* ... "Process" the result row */

  } /* end of for-loop */

  if (rc != SQL_NO_DATA_FOUND)

    fprintf(stderr,

            "Unable to fetch the next row\n");

/* Close the cursor associated with the SELECT statement */

rc = SQLFreeStmt(hstmt, SQL_CLOSE);

}